package leetCode;

/**
 * 给你一个大小为 m x n 的二进制矩阵 grid 。
 * <p>
 * 岛屿 是由一些相邻的 1 (代表土地) 构成的组合，这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0（代表水）包围着。
 * <p>
 * 岛屿的面积是岛上值为 1 的单元格的数目。
 * <p>
 * 计算并返回 grid 中最大的岛屿面积。如果没有岛屿，则返回面积为 0 。
 *
 * @author 司松坡
 * @createTime 2023年04月09日
 */
public class LeetCode695 {

    int count;

    public int maxAreaOfIsland(int[][] grid) {
        int row = grid.length;
        if (row == 0) {
            return 0;
        }
        int arrange = grid[0].length;
        if (arrange == 0) {
            return 0;
        }
        int res = 0;
        boolean[][] bool = new boolean[row][arrange];
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < arrange; j++) {
                count = 0;
                if (!bool[i][j] && grid[i][j] == 1) {
                    callBack(grid, bool, i, j);
                    res = Math.max(count, res);
                } else {
                    bool[i][j] = true;
                }
            }
        }
        return res;
    }

    public void callBack(int[][] grid, boolean[][] bool, int row, int arrange) {
        if (row >= 0 && row < grid.length && arrange >= 0 && arrange < grid[0].length && !bool[row][arrange] && grid[row][arrange] == 1) {
            count++;
        } else {
            return;
        }
        bool[row][arrange] = true;
        callBack(grid, bool, row + 1, arrange);
        callBack(grid, bool, row - 1, arrange);
        callBack(grid, bool, row, arrange + 1);
        callBack(grid, bool, row, arrange - 1);
    }


}
